package com.atguigu.tingshu.dispatch.job;

import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.dispatch.mapper.XxlJobLogMapper;
import com.atguigu.tingshu.model.dispatch.XxlJobLog;
import com.atguigu.tingshu.search.client.SearchFeignClient;
import com.atguigu.tingshu.user.client.UserInfoFeignClient;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class DispatchJobHandler {

    @Autowired
    private SearchFeignClient searchFeignClient;

    @Autowired
    private XxlJobLogMapper xxlJobLogMapper;

    @Autowired
    private UserInfoFeignClient userInfoFeignClient;

    /**
     * 定期更新排行榜
     * @return
     */
    @XxlJob("updateLatelyAlbumRankingJob")
    public Result updateLatelyAlbumRanking(){
        //  调用更新排行榜:  这个功能在service-search 微服务中.
        //  xxl_job_log 这张表是微服务自己记录日志的。 这个任务执行的时间，状态等放入xxl_job_log 表中.
        XxlJobLog xxlJobLog = new XxlJobLog();
        //  先创建一个系统时间
        long startTime = System.currentTimeMillis();
        try {
            //  执行任务Id
            xxlJobLog.setJobId(XxlJobHelper.getJobId());
            searchFeignClient.updateLatelyAlbumRanking();
            //  表示执行成功
            xxlJobLog.setStatus(1);
        } catch (Exception e) {
            //  执行失败
            xxlJobLog.setStatus(0);
            //  记录日志
            xxlJobLog.setError(e.getMessage());
            throw new RuntimeException(e);
        } finally {
            //  结束时间：
            long times = System.currentTimeMillis() - startTime;
            xxlJobLog.setTimes((int) times);
            //  保存记录：
            xxlJobLogMapper.insert(xxlJobLog);
        }

        //  默认返回。
        return Result.ok();
    }

    @XxlJob("updateVipExpireStatusJob")
    public Result updateVipExpireStatus(){

        //  xxl_job_log 这张表是微服务自己记录日志的。 这个任务执行的时间，状态等放入xxl_job_log 表中.
        XxlJobLog xxlJobLog = new XxlJobLog();
        //  先创建一个系统时间
        long startTime = System.currentTimeMillis();
        try {
            //  执行任务Id
            xxlJobLog.setJobId(XxlJobHelper.getJobId());
            //  更新过期的vip
            userInfoFeignClient.updateVipExpireStatus();
            //  表示执行成功
            xxlJobLog.setStatus(1);
        } catch (Exception e) {
            //  执行失败
            xxlJobLog.setStatus(0);
            //  记录日志
            xxlJobLog.setError(e.getMessage());
            throw new RuntimeException(e);
        } finally {
            //  结束时间：
            long times = System.currentTimeMillis() - startTime;
            xxlJobLog.setTimes((int) times);
            //  保存记录：
            xxlJobLogMapper.insert(xxlJobLog);
        }

        //  默认返回。
        return Result.ok();
    }
}